<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /* 
     请封装一个函数,可以按照以下调用的方式进行求和
       - add(1,2,3)
       - add(1,2)(3)
       - add(1)(2,3)
       - add(1)(2)(3)
       - add(1,2)(2,2)(3,2)....
   */
        function add(...arg) {
            let num = 0
            // 当开始调用add的时候，首先把第一次传入的参数求和出来
            num = arg.reduce((p, c) => p + c, 0);

            const temp = (...arg) => {
                num = arg.reduce((p, c) => p + c, num)
                return temp
            }
            //重写temp函数的toString方法,当函数转字符串的时候,会隐式转换调用自身的toString方法
            temp.toString = function () {
                return num
            }
            return temp
        }
        //当函数被alert的时候,会默认调用自身的toString方法
        alert(add(1, 2)(2, 3)(3, 4))
        alert(add(1, 2)(3))
    </script>
</body>

</html>